#pragma once
#include <cstdio>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "type_def.h"
class WorkTask
{
private:
    // 一个任务队列
    ListFunction task_queue_;
    // 任务队列锁,防止多个任务线程对同一个任务队列进行写操作时产生冲突
    std::mutex task_queue_mutex_;
    // 条件变量,用于通知任务队列有任务需要处理
    std::condition_variable task_queue_cv_;
    // 计数
    uint32_t task_count_ = 0;
public:
    WorkTask(uint32_t stack_size);
    ~WorkTask();
    // 工作任务中包含消费任务队列中的任务
    void work_task_loop();
    // 生产任务
    void enqueue_task(FuncVoid func);
};
